package main

import (
	"fmt"
	"os"
	ss "strings"
)

func main() {
	testStrings()
	formatString()
}

func testStrings() {
	p := fmt.Println
	p("Contains : ", ss.Contains("test", "es"))
	p("Count", ss.Count("test", "t"))
	p("HasPrefix", ss.HasPrefix("test", "te"))
	p("Join", ss.Join([]string{"a", "b"}, "-"))
	p("Repeat", ss.Repeat("a", 5))
	p("ToLower", ss.ToLower("TEST"))
	p("ToUpper", ss.ToUpper("test"))
}

type point struct {
	x, y int
}

func formatString() {
	p := point{1, 2}
	// 打印struct的值
	fmt.Printf("%v\n", p)
	//　打印参数和值
	fmt.Printf("%+v\n", p)
	// 打印source code
	fmt.Printf("%#v\n", p)
	// 打印类型
	fmt.Printf("%T\n", p)
	//fmt.Printf("%t\n", p)

	fmt.Printf("%t\n", true)
	fmt.Printf("%d\n", 123)
	fmt.Printf("%b\n", 14)
	fmt.Printf("%c\n", 33)

	fmt.Printf("%x\n", 456)
	fmt.Printf("%f\n", 78.9)

	fmt.Printf("%e\n", 12300000.0)
	fmt.Printf("%E\n", 12300000.0)

	// 不打印双引号
	fmt.Printf("%s\n", "\"string\"")
	// 打印带双引号的字符串
	fmt.Printf("%q\n", "\"string\"")

	// 打印指针
	fmt.Printf("%p\n", &p)
	//fmt.Printf("%p\n", p)

	// 格式化小数
	fmt.Printf("|%6d|%6d|\n", 12, 345)
	fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45)
	//左对齐
	fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45)
	fmt.Printf("|%6s|%6s|\n", "foo", "b")
	fmt.Printf("|%-6s|%-6s|\n", "foo", "b")

	// 格式化变量
	s := fmt.Sprintf("a %s", "string")
	fmt.Println(s)

	// 输出指定文件流
	fmt.Fprintf(os.Stderr, "an %s\n", "error")

}
